package com.mo.lib.view.listview

import android.content.Context
import android.util.AttributeSet
import android.widget.ListView

/**
 * @ author：mo
 * @ data：:
 * @ 功能：自定义listview 解决兼容scrollview时的显示bug
 */
class KListView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) : ListView(context, attrs, defStyle) {
    /** 重写该方法，达到使ListView适应ScrollView的效果*/
    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        val expandSpec = MeasureSpec.makeMeasureSpec(Int.MAX_VALUE shr 2, MeasureSpec.AT_MOST)
        super.onMeasure(widthMeasureSpec, expandSpec)
    }

    /**
     * 手动计算出listView的高度，但是不再具有滚动效果
     */
    fun fixListViewHeight() { // 如果没有设置数据适配器，则ListView没有子项，返回。
        val listAdapter = this.adapter
        var totalHeight = 0
        if (listAdapter == null) {
            return
        }
        var index = 0
        val len = listAdapter.count
        while (index < len) {
            val listViewItem = listAdapter.getView(index, null, this) // 计算子项View 的宽高
            listViewItem.measure(0, 0) // 计算所有子项的高度
            totalHeight += listViewItem.measuredHeight
            index++
        }
        val params = this.layoutParams // listView.getDividerHeight()获取子项间分隔符的高度 // params.height设置ListView完全显示需要的高度
        params.height = totalHeight + this.dividerHeight * (listAdapter.count - 1)
        this.layoutParams = params
    }
}